查看原文
其他

还原论不蕴含建构论

liuyubobobo 是不是很酷 2021-05-31

昨天,公众号发表了一篇文章——应用层并不简单。这篇文章的主题,想要表达的就是:应用层并不简单 


看了大家的留言,我觉得很多同学的理解并不是我想表达的。这说明了我的表达能力有多么差 


不知道为什么,作为一个认为基础无比重要的程序员,我却对“应用层并不简单”这个观点出奇的执著。所以,我想借这篇文章,再进一步阐述一下。





很多同学把问题引向了一个产品在市场上为什么成功或者为什么失败。比如 Google 为什么没有做成社交,或者微软为什么没有做成移动操作系统。


这个问题固然值得讨论,但其实不是我想阐述的重点。


对这个问题的探讨,势必会转移到对于市场,产品,运营,宣传,甚至是时代因素和企业文化基因等等方向的讨论上。但我真正想表达的是,抛开这些因素,如果我们只看技术因素,应用层的技术也并不简单。


我曾经参加过一些企业内部的“失败产品”复盘会。固然,一个项目的失败,在产品,市场,运营,宣传,战略,管理,等等方面,都可以找到原因,但是,在“甩锅大会”上,一个绕不开的原因,是技术响应“不及时”。


身为程序员,我肯定要为这个锅鸣不平;但是如果站在局外人的视角,我也很理解这口锅的来源。


如果发现 bug,能在 1 秒钟就修复,会怎样?如果产品运营过程中,看到新的需求,能在一小时内就搞定,会怎样?如果每策划一个新的活动,能在一天内就上线呢?如果每一个新的功能,都能在一周内搞定呢?


诚然,即使做到如此,产品也不一定成功,但关键是:现有的技术,做不到这一点。而技术达不到这样的响应级别,已经一定程度不能满足这个时代的需求了。


所以企业需要这么多程序员,所以程序员群体拿着这么高的工资,所以大家都在 996。但做不到就是做不到。这不是程序员努力不努力工作的问题,而是软件开发这项工作本身的难度所决定的。


著名的《人月神话》很早就描述清楚这个问题了。生一个小孩需要妈妈怀胎十月,但这不代表十个妈妈就能用一个月生下一个孩子。



按照《人月神话》的原话说,就是:

软件开发的一大难题,是从单一程序,到软件系统过程中,所造成复杂度的快速上升。


这是我想表达的,应用层的开发也是复杂的核心。


(当然,产品,市场,运营,宣传,战略,等等这些方面,也是复杂的,并且也决定了一个项目的成败,但不在我的讨论范围里。)





另一些同学的讨论,转向了:应用层的开发之所以难,是因为需要更多的和人打交道,而和人打交道,是难的。


首先,这是绝对正确的。实际上,我有一个基本观点,就是和人打交道的工作,是最不可取代的,也是最有竞争力的。这也是我建议很多同学在钻研技术的同时,思考一下管理,业务,等等方面的原因。


但是,我想说,即使刨除人的因素,应用层的开发也是难的。


我们可以做一个思维实验。假设我们拥有一个“完美”的甲方爸爸,从来不会有不合理的需求变更,对自己到底想要什么产品一清二楚,每次项目更新的需求文档清晰明了,技术上也没有难题。


一切的一切,就差一帮程序员,来把它实现出来了。在这种情况下,你所在的团队,真的能“轻松”搞定吗?



可能有的同学会问,为什么完美的甲方爸爸,还需要有“项目更新”?不能一次到位吗?


答案是不能。这是因为,时代是在进步的,产品也是在成长的。


在 3G 时代,通信产品只要能传输文字就好,而到了 4G 时代,就有了传输图片,语音甚至视频的需求;有了发送表情包的需求;有了实时通话的需求;


一个专门卖书的电商网站,技术架构是一个样子;但业务拓展以后,开始卖电子产品了,技术设计就要跟着变;


最初是单纯的 toC 业务,后来开始开拓 toB 业务了;或者开始转型做平台,不仅仅支持交易,还支持各个商家的入驻了,项目架构就要跟着变。


这些就是我说“合理”的需求变更。这些需求变更,在我看来不是因为和人打交道而造成的障碍。我们假想技术人员可以和所有人 0 成本的 100% 充分沟通,软件本身也依然必须要解决这种变化。


因为软件要解决真实世界的问题,而真实的世界是变化的,所以软件必须能应付这种变化。这是软件行业需要解决的问题,不能怪罪到人头上。


这就好比物理学必须要能够分析解释运动的物体,而不是怪罪这个世界为什么是动态的。


软件行业也是如此。


(当然,沟通本身也是难的,并且也是软件工程讨论的重点。那么多文档,规范,其实都在想办法解决内部的沟通协调问题。甚至对这些问题的处理和思考,也已经可以纳入了“技术”的范围了。)





实际上,这幅漫画,就是最接近我想表达的核心的。虽然在这幅漫画中,没有计算机科学什么事儿。



物理学虽然可以说是数学的应用,但物理绝对不简单;


生物学虽然可以说是化学的应用,但生物学也绝不简单。


“应用层”并不简单,是因为每个“应用层”,有它自己的问题需要处理。



这个公众号的读者 @LINSOFT,向我推荐了一篇论文:《More is different》,其核心论点,就是这一点。


我吹爆我的公众号读者,你们最酷!



这篇论文是 1972 年物理学领域的论文,发表在了 Science 上。


我对物理学一窍不通,所以这篇论文的 80%,我都看不懂。不过好在,这部分我看不懂的内容,是作者在文章中部,用专业的物理知识来论证他的观点的部分。这并不影响我们理解作者的论点。


作者的主要论点,如果让我总结,就是这篇文章的标题:还原论不蕴含建构论。

the reductionist hypothesis does not by any means imply a "constructionist" one.


这句话看起来拗口,但并不难理解。我会仔细分析这句话是什么意思。并且,在我看来,一切都可以完美地映射到计算机领域。


在下面的阐述中,我会用浅灰色的字,来把作者的观点,映射到计算机领域。





什么是还原论?


还原论是一种哲学思想,认为复杂的系统、事务、现象,可以通过将其拆解,来加以理解和描述。


很多科学研究中,都充斥着还原论的思想。


比如现代物理学,把世界的存在归于基本粒子及其相互作用。研究清楚了基本粒子,很可能就研究清楚了整个世界;


再比如现代生物学研究的一个方向,就是认为分子水平的研究,就可以揭开生命复杂性的全部奥秘;


放到计算机领域来,就是,研究计算机的基础架构,数据库,操作系统,体系结构,乃至达到硬件层面,CPU,电路的设计和基本原理,是驾驭计算机的关键。


这些都是还原论的思想。



当然,还原论的研究思路是有局限性的,和还原论对应的哲学思想是整体论,在这里就不展开了。但这不影响还原论是一种非常重要的科学研究方式。(关于还原论还有更多可以探讨的内容,在这里也不展开了。)


但基于还原论,如果我们得出如下的结论,则是有问题的:

如果一切事物皆遵守同样的基本定律,那么只有研究这些基础,才是真正的探索这个世界。


放到计算机领域中来,就是只有研究计算机的底层原理,才是真正在研究计算机。



为了说明这个观点的问题,文章作者 Anderson 使用物理学举例:

The more the elementary particle physicists tell us about the nature of the fundamental laws, the less relevance they seem to have to the very real problems of the rest of science, much less to those of society.

简单翻译:物理学家对基本粒子的性质了解得越多,我们越容易发现,这些性质对于理解其他科学领域中的真实问题并不相关。至于对于解决社会问题,就更不相关了。


我们对 CPU 内部每一个元器件的工作原理理解得越清楚,越会发现,这些元器件的工作原理,似乎和开发一个微信系统相差甚远。



为什么会这样?作者解释,就是因为:还原论不蕴含建构论。


“建构论”是作者起的一个名字,而不是一个专有术语。按照作者的进一步解释,就是:

The ability to reduce everything to simple fundamental laws does not imply the ability to start from those laws and reconstruct the universe.

简单翻译:我们将万物还原成了一些最基本的物理定律,不意味着我们可以从这些定律出发,重建整个宇宙。


重建整个宇宙,就是作者说的建构论。


换句话说,能“还原”,不代表能“建构”。


理解了 CPU 的工作原理,不代表我们就能轻松架构出一个淘宝网了。纵使淘宝网的运转,离不开服务器上一个一个的 CPU。



作者基于物理学,继续举例说:面对尺度和复杂性的双重困难,“还原则能构建”的假设,是完全站不住脚的。即使在物理学领域也是如此。


因为基本粒子集合体的行为,并不能按照少数粒子的性质简单外推得到。



事实上,每当复杂性累积到一个层次,都会有崭新的性质出现;而作者认为,为了理解这些新的性质,其相关研究,同样是基础性的。


研究 CPU 是基础的,但是我们在 CPU 的基础上假设了操作系统,对操作系统的研究,也是基础的;


我们在操作系统上搭建了数据库,对数据库的研究,也是基础的;


我们在数据库的基础上搭建了各式应用,对这些应用开发的研究,同样是基础的。



文章的作者推而广之:不同的学科之间也有这样的关系。


很多人认为物理学是数学的应用;化学是物理学的应用;生物学是化学的应用;心理学是生物学的应用......


每一个基础学科,积累到一定程度,就会产生一个新的学科层级;而在每一个层级上,新的定律、概念和原理都是必不可少的,其所需要的想象力与创造力丝毫不亚于前一个层级。


对操作系统的研究,所需要的想象力与创造力,丝毫不亚于研究 CPU;


对数据库的研究,所需要的想象力与创造力,丝毫不亚于研究操作系统;


对 CRM 开发的研究,所需要的想象力与创造力,丝毫不亚于研究数据库。



甚至,作者直接拒绝称这些学科之间,是应用关系。

Psychology is not applied biology, nor is biology applied chemistry.


因为每一个学科,并非简单的上一层级学科应用,而是面对全新的挑战,需要处理全新的问题。


这个观点才是我真正想表述的:应用层并不简单的意思。


应用层软件的搭建,确实依赖于基础,但是,应用层也有应用层自身的问题需要解决。解决这些问题,是需要想象力和创造力的,其所需要付出的努力,不亚于研究基础。


探讨如何做好应用层的开发,也是一个基础工作。



原来 50 年前的先哲,已经把这件事儿说得很明白了 


这也是这篇论文的题目《More is different》的意思。每一个层级都是在上一层级的基础上添加一些东西(More)。但添加着添加着,事情就不一样了,产生了本质的变化(different)。


这篇论文的结尾,作者使用了一个大家更耳熟能详的老话,来总结这一现象,就是量变产生质变:

quantitative differences become qualitative ones.


作者非常诙谐又巧妙地,使用 1920 年,发生在巴黎的一场对话,来作为结尾。


菲兹杰拉德(Fitzgerald)说:富人不同于我们。


海明威(Hemingway)说:是的,他们有更多的钱。


FITZGERALD: 

The rich are different from us. 


HEMINGWAY: 

Yes. they have more money. 


more is different.


大家加油!:)




本文相关阅读推荐:

应用层并不简单

软件行业还大有作为

和软件开发相关的一些思考

不会翻转二叉树的大神



如果喜欢我的文章,点个”在看“吧 

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存